/*************************************************************************
	> File Name: Algorithm.h
	> Author: 
	> Mail: 
	> Created Time: 2021年12月22日 星期三 15时25分40秒
 ************************************************************************/

#ifndef _DMA_BUF_MANAGER_H
#define _DMA_BUF_MANAGER_H
#include <iostream>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <log/log.h>
#include "WmarkDev.h"
#include "wmark_dev.h"
#include "ionutils.h"
#include "ControlMsgIntface.h"

namespace camera
{
    namespace algorithm
    {

        class DmaBufManager : public ControlMsgIntface
        {

        public:
            DmaBufManager();
            ~DmaBufManager();

            struct ion_buffer_info * indexToBufAddr(int index);
        
        private:

            WmarkDev *mWmarkDev = NULL;
            bool mInitFlag = false; // 初始化标志

            struct ion_buffer_info mIonBufsInfo[DMA_BUFS_MAX_NUM];

            std::mutex mMutex;
            void checkData(uint8_t *buffer, uint64_t len);

            void onResult(control_msg_t &info)override;

            int initDmaBuf();
            int uninitDmaBuf();
        };

    } // algorithm
} // camera
#endif